{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Implementation of Wasserstein GANs\n",
    "Reference: https://arxiv.org/pdf/1701.07875.pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Run the comment below only when using Google Colab\n",
    "# !pip install torch torchvision"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torchvision\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from torch.utils.data import DataLoader\n",
    "from torchvision import datasets\n",
    "from torchvision import transforms\n",
    "from torchvision.utils import save_image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import datetime\n",
    "import os, sys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from matplotlib.pyplot import imshow, imsave\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "MODEL_NAME = 'W-GAN'\n",
    "DEVICE = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def to_onehot(x, num_classes=10):\n",
    "    assert isinstance(x, int) or isinstance(x, (torch.LongTensor, torch.cuda.LongTensor))\n",
    "    if isinstance(x, int):\n",
    "        c = torch.zeros(1, num_classes).long()\n",
    "        c[0][x] = 1\n",
    "    else:\n",
    "        x = x.cpu()\n",
    "        c = torch.LongTensor(x.size(0), num_classes)\n",
    "        c.zero_()\n",
    "        c.scatter_(1, x, 1) # dim, index, src value\n",
    "    return c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def get_sample_image(G, n_noise=100):\n",
    "    \"\"\"\n",
    "        save sample 100 images\n",
    "    \"\"\"\n",
    "    img = np.zeros([280, 280])\n",
    "    for j in range(10):\n",
    "        c = torch.zeros([10, 10]).to(DEVICE)\n",
    "        c[:, j] = 1\n",
    "        z = torch.randn(10, n_noise).to(DEVICE)\n",
    "        y_hat = G(z,c).view(10, 28, 28)\n",
    "        result = y_hat.cpu().data.numpy()\n",
    "        img[j*28:(j+1)*28] = np.concatenate([x for x in result], axis=-1)\n",
    "    return img"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Discriminator(nn.Module):\n",
    "    \"\"\"\n",
    "        Convolutional Discriminator for MNIST\n",
    "    \"\"\"\n",
    "    def __init__(self, in_channel=1, input_size=784, condition_size=10, num_classes=1):\n",
    "        super(Discriminator, self).__init__()\n",
    "        self.transform = nn.Sequential(\n",
    "            nn.Linear(input_size+condition_size, 784),\n",
    "            nn.LeakyReLU(0.2),\n",
    "        )\n",
    "        self.conv = nn.Sequential(\n",
    "            # 28 -> 14\n",
    "            nn.Conv2d(in_channel, 512, 3, stride=2, padding=1, bias=False),\n",
    "            nn.BatchNorm2d(512),\n",
    "            nn.LeakyReLU(0.2),\n",
    "            # 14 -> 7\n",
    "            nn.Conv2d(512, 256, 3, stride=2, padding=1, bias=False),\n",
    "            nn.BatchNorm2d(256),\n",
    "            nn.LeakyReLU(0.2),\n",
    "            # 7 -> 4\n",
    "            nn.Conv2d(256, 128, 3, stride=2, padding=1, bias=False),\n",
    "            nn.BatchNorm2d(128),\n",
    "            nn.LeakyReLU(0.2),\n",
    "            nn.AvgPool2d(4),\n",
    "        )\n",
    "        self.fc = nn.Sequential(\n",
    "            # reshape input, 128 -> 1\n",
    "            nn.Linear(128, 1),\n",
    "        )\n",
    "    \n",
    "    def forward(self, x, c=None):\n",
    "        # x: (N, 1, 28, 28), c: (N, 10)\n",
    "        x, c = x.view(x.size(0), -1), c.float() # may not need\n",
    "        v = torch.cat((x, c), 1) # v: (N, 794)\n",
    "        y_ = self.transform(v) # (N, 784)\n",
    "        y_ = y_.view(y_.shape[0], 1, 28, 28) # (N, 1, 28, 28)\n",
    "        y_ = self.conv(y_)\n",
    "        y_ = y_.view(y_.size(0), -1)\n",
    "        y_ = self.fc(y_)\n",
    "        return y_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Generator(nn.Module):\n",
    "    \"\"\"\n",
    "        Convolutional Generator for MNIST\n",
    "    \"\"\"\n",
    "    def __init__(self, input_size=100, condition_size=10):\n",
    "        super(Generator, self).__init__()\n",
    "        self.fc = nn.Sequential(\n",
    "            nn.Linear(input_size+condition_size, 4*4*512),\n",
    "            nn.ReLU(),\n",
    "        )\n",
    "        self.conv = nn.Sequential(\n",
    "            # input: 4 by 4, output: 7 by 7\n",
    "            nn.ConvTranspose2d(512, 256, 3, stride=2, padding=1, bias=False),\n",
    "            nn.BatchNorm2d(256),\n",
    "            nn.ReLU(),\n",
    "            # input: 7 by 7, output: 14 by 14\n",
    "            nn.ConvTranspose2d(256, 128, 4, stride=2, padding=1, bias=False),\n",
    "            nn.BatchNorm2d(128),\n",
    "            nn.ReLU(),\n",
    "            # input: 14 by 14, output: 28 by 28\n",
    "            nn.ConvTranspose2d(128, 1, 4, stride=2, padding=1, bias=False),\n",
    "            nn.Tanh(),\n",
    "        )\n",
    "        \n",
    "    def forward(self, x, c):\n",
    "        # x: (N, 100), c: (N, 10)\n",
    "        x, c = x.view(x.size(0), -1), c.float() # may not need\n",
    "        v = torch.cat((x, c), 1) # v: (N, 110)\n",
    "        y_ = self.fc(v)\n",
    "        y_ = y_.view(y_.size(0), 512, 4, 4)\n",
    "        y_ = self.conv(y_) # (N, 28, 28)\n",
    "        return y_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "D = Discriminator().to(DEVICE)\n",
    "G = Generator().to(DEVICE)\n",
    "# D.load_state_dict('D_dc.pkl')\n",
    "# G.load_state_dict('G_dc.pkl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "transform = transforms.Compose([transforms.ToTensor(),\n",
    "                                transforms.Normalize(mean=[0.5],\n",
    "                                std=[0.5])]\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "mnist = datasets.MNIST(root='../data/', train=True, transform=transform, download=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 64"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data_loader = DataLoader(dataset=mnist, batch_size=batch_size, shuffle=True, drop_last=True, pin_memory=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "D_opt = torch.optim.RMSprop(D.parameters(), lr=0.0005)\n",
    "G_opt = torch.optim.RMSprop(G.parameters(), lr=0.0005)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "max_epoch = 30 # need more than 100 epochs for training generator\n",
    "step = 0\n",
    "g_step = 0\n",
    "n_noise = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def n_critic(step, nc=2):\n",
    "    if step < 25 or step % 500 == 0:\n",
    "        return 100\n",
    "    return nc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "D_labels = torch.ones([batch_size, 1]).to(DEVICE) # Discriminator Label to real\n",
    "D_fakes = torch.zeros([batch_size, 1]).to(DEVICE) # Discriminator Label to fake"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 0/30, Step: 0, D Loss: 0.004117418080568314, G Loss: -0.008988008834421635\n",
      "Epoch: 0/30, Step: 500, D Loss: -1.599825918674469e-05, G Loss: -0.008754456415772438\n",
      "Epoch: 1/30, Step: 1000, D Loss: -2.3813918232917786e-05, G Loss: -0.009472677484154701\n",
      "Epoch: 1/30, Step: 1500, D Loss: -8.712522685527802e-06, G Loss: -0.00866131205111742\n",
      "Epoch: 2/30, Step: 2000, D Loss: -6.854534149169922e-07, G Loss: -0.009275324642658234\n",
      "Epoch: 2/30, Step: 2500, D Loss: -9.033828973770142e-08, G Loss: -0.008892761543393135\n",
      "Epoch: 3/30, Step: 3000, D Loss: 7.171183824539185e-08, G Loss: -0.008833834901452065\n",
      "Epoch: 3/30, Step: 3500, D Loss: 2.8870999813079834e-07, G Loss: -0.008951780386269093\n",
      "Epoch: 4/30, Step: 4000, D Loss: -2.980232238769531e-07, G Loss: -0.009025951847434044\n",
      "Epoch: 4/30, Step: 4500, D Loss: 1.862645149230957e-09, G Loss: -0.008728638291358948\n",
      "Epoch: 5/30, Step: 5000, D Loss: -9.313225746154785e-10, G Loss: -0.008916424587368965\n",
      "Epoch: 5/30, Step: 5500, D Loss: -9.313225746154785e-10, G Loss: -0.009103072807192802\n",
      "Epoch: 6/30, Step: 6000, D Loss: 0.0, G Loss: -0.009054867550730705\n",
      "Epoch: 6/30, Step: 6500, D Loss: 9.313225746154785e-10, G Loss: -0.009102742187678814\n",
      "Epoch: 7/30, Step: 7000, D Loss: 0.0, G Loss: -0.008931582793593407\n",
      "Epoch: 8/30, Step: 7500, D Loss: 0.0, G Loss: -0.00907458271831274\n",
      "Epoch: 8/30, Step: 8000, D Loss: 0.0, G Loss: -0.008940527215600014\n",
      "Epoch: 9/30, Step: 8500, D Loss: -9.313225746154785e-10, G Loss: -0.008939829654991627\n",
      "Epoch: 9/30, Step: 9000, D Loss: 9.313225746154785e-10, G Loss: -0.008988702669739723\n",
      "Epoch: 10/30, Step: 9500, D Loss: 9.313225746154785e-10, G Loss: -0.009093346074223518\n",
      "Epoch: 10/30, Step: 10000, D Loss: -9.313225746154785e-10, G Loss: -0.008917517960071564\n",
      "Epoch: 11/30, Step: 10500, D Loss: 0.0, G Loss: -0.008969239890575409\n",
      "Epoch: 11/30, Step: 11000, D Loss: 0.0, G Loss: -0.008875468745827675\n",
      "Epoch: 12/30, Step: 11500, D Loss: -9.313225746154785e-10, G Loss: -0.009069228544831276\n",
      "Epoch: 12/30, Step: 12000, D Loss: 0.0, G Loss: -0.009269727393984795\n",
      "Epoch: 13/30, Step: 12500, D Loss: 0.0, G Loss: -0.009338702075183392\n",
      "Epoch: 13/30, Step: 13000, D Loss: -9.313225746154785e-10, G Loss: -0.00925383623689413\n",
      "Epoch: 14/30, Step: 13500, D Loss: 0.0, G Loss: -0.00941171683371067\n",
      "Epoch: 14/30, Step: 14000, D Loss: 0.0, G Loss: -0.00920211523771286\n",
      "Epoch: 15/30, Step: 14500, D Loss: 0.0, G Loss: -0.00910292286425829\n",
      "Epoch: 16/30, Step: 15000, D Loss: 0.0, G Loss: -0.00914795882999897\n",
      "Epoch: 16/30, Step: 15500, D Loss: -9.313225746154785e-10, G Loss: -0.009230108000338078\n",
      "Epoch: 17/30, Step: 16000, D Loss: 0.0, G Loss: -0.009250262752175331\n",
      "Epoch: 17/30, Step: 16500, D Loss: 0.0, G Loss: -0.009281259030103683\n",
      "Epoch: 18/30, Step: 17000, D Loss: 0.0, G Loss: -0.00915216002613306\n",
      "Epoch: 18/30, Step: 17500, D Loss: 0.0, G Loss: -0.00909469835460186\n",
      "Epoch: 19/30, Step: 18000, D Loss: 0.0, G Loss: -0.009153008460998535\n",
      "Epoch: 19/30, Step: 18500, D Loss: 0.0, G Loss: -0.009008231572806835\n",
      "Epoch: 20/30, Step: 19000, D Loss: 9.313225746154785e-10, G Loss: -0.00904090516269207\n",
      "Epoch: 20/30, Step: 19500, D Loss: -9.313225746154785e-10, G Loss: -0.009028646163642406\n",
      "Epoch: 21/30, Step: 20000, D Loss: 0.0, G Loss: -0.009081948548555374\n",
      "Epoch: 21/30, Step: 20500, D Loss: 0.0, G Loss: -0.009116753935813904\n",
      "Epoch: 22/30, Step: 21000, D Loss: 0.0, G Loss: -0.00920315645635128\n",
      "Epoch: 22/30, Step: 21500, D Loss: -9.313225746154785e-10, G Loss: -0.009267526678740978\n",
      "Epoch: 23/30, Step: 22000, D Loss: 9.313225746154785e-10, G Loss: -0.009308744221925735\n",
      "Epoch: 24/30, Step: 22500, D Loss: 0.0, G Loss: -0.00923323817551136\n",
      "Epoch: 24/30, Step: 23000, D Loss: 0.0, G Loss: -0.009402524679899216\n",
      "Epoch: 25/30, Step: 23500, D Loss: -9.313225746154785e-10, G Loss: -0.009341285564005375\n",
      "Epoch: 25/30, Step: 24000, D Loss: 0.0, G Loss: -0.00936215091496706\n",
      "Epoch: 26/30, Step: 24500, D Loss: 0.0, G Loss: -0.009425638243556023\n",
      "Epoch: 26/30, Step: 25000, D Loss: 0.0, G Loss: -0.00926903635263443\n",
      "Epoch: 27/30, Step: 25500, D Loss: 0.0, G Loss: -0.009203221648931503\n",
      "Epoch: 27/30, Step: 26000, D Loss: -9.313225746154785e-10, G Loss: -0.00910208746790886\n",
      "Epoch: 28/30, Step: 26500, D Loss: 0.0, G Loss: -0.009030099026858807\n",
      "Epoch: 28/30, Step: 27000, D Loss: 0.0, G Loss: -0.008972253650426865\n",
      "Epoch: 29/30, Step: 27500, D Loss: 0.0, G Loss: -0.00896351970732212\n",
      "Epoch: 29/30, Step: 28000, D Loss: 9.313225746154785e-10, G Loss: -0.008853761479258537\n"
     ]
    }
   ],
   "source": [
    "for epoch in range(max_epoch):\n",
    "    for idx, (images, labels) in enumerate(data_loader):\n",
    "                   \n",
    "        # Training Discriminator\n",
    "        x = images.to(DEVICE)\n",
    "        y = labels.view(batch_size, 1)\n",
    "        y = to_onehot(y).to(DEVICE)\n",
    "        x_outputs = D(x, y)\n",
    "\n",
    "        z = torch.randn(batch_size, n_noise).to(DEVICE)\n",
    "        z_outputs = D(G(z, y), y)\n",
    "        D_x_loss = torch.mean(x_outputs)\n",
    "        D_z_loss = torch.mean(z_outputs)\n",
    "        D_loss = D_z_loss - D_x_loss\n",
    "        \n",
    "        D.zero_grad()\n",
    "        D_loss.backward()\n",
    "        D_opt.step()\n",
    "        # Parameter(Weight) Clipping for K-Lipshitz constraint\n",
    "        for p in D.parameters():\n",
    "            p.data.clamp_(-0.01, 0.01)\n",
    "                    \n",
    "        if step % 1 == 0:\n",
    "            g_step += 1\n",
    "            # Training Generator\n",
    "            z = torch.randn(batch_size, n_noise).to(DEVICE)\n",
    "            z_outputs = D(G(z, y), y)\n",
    "            G_loss = -torch.mean(z_outputs)\n",
    "\n",
    "            D.zero_grad()\n",
    "            G.zero_grad()\n",
    "            G_loss.backward()\n",
    "            G_opt.step()\n",
    "            \n",
    "        if step % 500 == 0:\n",
    "            print('Epoch: {}/{}, Step: {}, D Loss: {}, G Loss: {}'.format(epoch, max_epoch, step, D_loss.item(), G_loss.item()))\n",
    "        \n",
    "        if step % 1000 == 0:\n",
    "            G.eval()\n",
    "            img = get_sample_image(G, n_noise)\n",
    "            imsave('samples/{}_step{}.jpg'.format(MODEL_NAME, str(step).zfill(3)), img, cmap='gray')\n",
    "            G.train()\n",
    "        step += 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sample"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x1d4550dc8d0>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nD3Y59te//pVcLhfFxsayOolEIpJKpaTRaOjdd9+ltLS0gGNu9Ho9Pf7446RUKik2NpYkEgnp9Xqv\n2JuMjAx65pln6IorriCFQuG3vPLycvbc9957L2tDmUxGqamp9Le//c3fd3HhhAKAeI/fD6BDjwAA\ngwEcByAD0AdACQBxbwiFnJycLh/B+PHjaeXKlX6v8+wcY8eOpdraWjKZTFRQUEAul4vcbje1tLTQ\nfffdR8uXL6fly5fTnDlzQvqg1Go1ud1u2r59OykUCvr000+pvr6eTp06RStWrKCCggIymUz06aef\nkkwm67aenbfOH2RGRga5XK4u7eFyucIWCv369aObb77Za98rr7xCSqWy22t0Oh0tW7aMCgsLmeAb\nM2YMrV+/nrZu3UobNmyg/fv308cff0wPPPAARUREkFgsJpFIRDKZjGQyGYlEooCEvLApFAoiIkpN\nTe1yTPjguru2traWiIja29u7zIIEpKensxmCIPSio6Ppo48+ov79+wc9O+M4jubOnUutra1ktVrp\ngQceoOjoaBKLxRQZGUlpaWmk1+t7LLempobVsXP5jz/+ONlsNtq8efOFFQrosCbUAHCgQ0dwB4D1\nAE4COAFgE7yFxCMAigGcBjAjQKHTY6N6wnN/W1sbEREtWbKkxzJGjBjBRgChIcePH0/79++nl19+\nmd59913Kzs6mjRs3UkRERMAvXKVSkcPhYPWzWq00cuRIUqvVXufNmTOHXC4XlZeXdxkRlEolKZXK\nHkcKALR//36aO3cu+3/JkiXs3sFEjXbeJBJJl/YNZJPJZHTTTTdRZmYmKZVKiomJodtuu43OnDlD\n5eXl1NraSna7nSoqKuill16iZcuWUUZGBmVlZdGYMWNIr9eTRqPpIii729xut8++EOjW3t7u1Z/e\ne+89rzIFgeF5jVarpUceeYRWr15NMpks6FkNz/O0YsUKqqmpoYqKCrrvvvto1KhRQZezcuXKbt+x\nxWIhoo6lXzfX995M4UJvgTRGd0JBgM1moxtuuKHb6zmO8ymFlUolXX311bR69Wr64IMPaPfu3XTs\n2DHq379/wC8sNTWVCQWXy0UtLS20YsWKLuvmRx99lGw2Gx06dKhLXVQqFanV6oDW2p3rlZWVxdoh\nLi4uJH2Ip84m2GvFYjEpFAqvzioSiWjixIm0fPlyOnXqFFksFtq/fz999NFHtGjRIlq4cCEtW7aM\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d454d72b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# generation to image\n",
    "G.eval()\n",
    "imshow(get_sample_image(G, n_noise), cmap='gray')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def save_checkpoint(state, file_name='checkpoint.pth.tar'):\n",
    "    torch.save(state, file_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Saving params.\n",
    "# torch.save(D.state_dict(), 'D_c.pkl')\n",
    "# torch.save(G.state_dict(), 'G_c.pkl')\n",
    "save_checkpoint({'epoch': epoch + 1, 'state_dict':D.state_dict(), 'optimizer' : D_opt.state_dict()}, 'D_w.pth.tar')\n",
    "save_checkpoint({'epoch': epoch + 1, 'state_dict':G.state_dict(), 'optimizer' : G_opt.state_dict()}, 'G_w.pth.tar')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
